// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "base/memory/memory_pressure_monitor_mac.h"

#include "base/macros.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace base {
namespace mac {

    class TestMemoryPressureMonitor : public MemoryPressureMonitor {
    public:
        using MemoryPressureMonitor::MemoryPressureLevelForMacMemoryPressure;

        TestMemoryPressureMonitor() { }

    private:
        DISALLOW_COPY_AND_ASSIGN(TestMemoryPressureMonitor);
    };

    TEST(MacMemoryPressureMonitorTest, MemoryPressureFromMacMemoryPressure)
    {
        EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE,
            TestMemoryPressureMonitor::
                MemoryPressureLevelForMacMemoryPressure(
                    DISPATCH_MEMORYPRESSURE_NORMAL));
        EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE,
            TestMemoryPressureMonitor::
                MemoryPressureLevelForMacMemoryPressure(
                    DISPATCH_MEMORYPRESSURE_WARN));
        EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL,
            TestMemoryPressureMonitor::
                MemoryPressureLevelForMacMemoryPressure(
                    DISPATCH_MEMORYPRESSURE_CRITICAL));
        EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE,
            TestMemoryPressureMonitor::
                MemoryPressureLevelForMacMemoryPressure(0));
        EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE,
            TestMemoryPressureMonitor::
                MemoryPressureLevelForMacMemoryPressure(3));
        EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE,
            TestMemoryPressureMonitor::
                MemoryPressureLevelForMacMemoryPressure(5));
        EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE,
            TestMemoryPressureMonitor::
                MemoryPressureLevelForMacMemoryPressure(-1));
    }

    TEST(MacMemoryPressureMonitorTest, CurrentMemoryPressure)
    {
        TestMemoryPressureMonitor monitor;
        MemoryPressureListener::MemoryPressureLevel memory_pressure = monitor.GetCurrentPressureLevel();
        EXPECT_TRUE(memory_pressure == MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE || memory_pressure == MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE || memory_pressure == MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL);
    }

} // namespace mac
} // namespace base
